/**
 * 城市群数量
 *
 * 描述
 * 给定一个 n 个节点的邻接矩阵 m。 节点定义为城市，如果 a 城市与 b 城市相连， b 与 c 城市相连，
 * 尽管 a 与 c 并不直接相连，但可以认为 a 与 c 相连，定义 a,b,c 是一个城市群。
 * 矩阵 m[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连，否则表示不相连。
 * 请你找出共有多少个城市群。
 *
 * 数据范围
 * 1≤n≤200
 * 矩阵中只包含 0 和 1
 */

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

/**
 * 这个方法就是用一个 vis 数组记录这个 i 城市
 * 是否已经被入城市群, 要是已经入了城市群的话,
 * 后续就不需要在判断他了
 * 然后再将这个 i 的城市在递归一遍, 找到相关联的城市
 * 群, 这个时候, 一整个城市群就是全都结束了, 可以判断
 * 后面的了, 这也就被视为一个城市群
 * 时间复杂度 : O(n ^ 2)
 * 空间复杂度 : O(n)
 */

public class Main {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param m int整型ArrayList<ArrayList<>>
     * @return int整型
     */
    public int citys (ArrayList<ArrayList<Integer>> m) {

        // 共有结果城市
        int n = m.size();

        // 记录共有几个城市群
        int res = 0;

        // 标记这个城市是否已经被记录入城市群
        boolean[] vis = new boolean[n];

        // 用来找相关联的城市群
        Queue<Integer> queue = new LinkedList<>();

        for (int i = 0; i < n; i++) {

            for (int j = 0; j < n; j++) {

                // 这里要是为 1 且 vis 为 false, 那么就说明
                // 这个位置还没有判断, 加入 queue 寻找城市群
                // 不能在这里面直接进行 res++, 因为可能有好多个
                // 城市 入队列, 但是这些城市属于一个城市群, 所以
                // 要在后面 进行 res++
                if (m.get(i).get(j) == 1 && !vis[j]) {
                    queue.add(j);
                }
            }

            // 这里要是 queue 本次循环不为 空, 那么就 res++, 添加一个城市群
            if (!queue.isEmpty()) {
                res++;
            }

            // 更新本次搜索的城市 状态
            vis[i] = true;

            // 更新选这次搜索相关的城市状态
            while (!queue.isEmpty()) {

                // 出元素
                int x = queue.poll();

                // 判断是否已经加入过城市群, 这里主要筛选自己, 不然会造成死循环
                if (!vis[x]) {

                    // 更新城市状态
                    vis[x] = true;
                    for (int j = 0; j < n; j++) {

                        // 有相关联的就继续添加
                        if (m.get(x).get(j) == 1 && !vis[j]) {
                            queue.add(j);
                        }
                    }
                }
            }
        }

        // 返回结果
        return res;
    }

    // 测试用例
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Main test = new Main();
        ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            ArrayList<Integer> list = new ArrayList<>();
            for (int j = 0; j < 3; j++) {
                int x = in.nextInt();
                list.add(x);
            }
            lists.add(list);
        }

        test.citys(lists);
    }
}